package com.cskaoyan.javase.oop1._6constructor._3notice;

/**
 * 注意事项/总结：
 *
 * 1.类中默认提供的无参构造方法，是在该类没有任何构造器的情况下才有的。但是如果类中有任一构造器（有参/无参），那么就没有默认无参存在了。
 *
 * 2.构造方法中可以使用this关键字，去访问对象的成员（变量和方法），但一般没有意义。
 *      没有必要在构造器中乱写代码
 *
 * 3.日常开发中写标准格式构造器，建议使用快捷键"Alt + Insert"自动生成。
 *
 * 4.类加载和构造器的执行：
 *      某个类的类加载在整个程序的一次运行期间，仅会有一次。
 *      但构造器是，new一次对象，就执行相应的构造器一次。new几次对象，就执行几次构造器！
 *
 *
 * 5.类中的多个构造器之间是方法的重载关系，注意重载的条件。尤其是形参名不同，不能构造方法重载。
 *
 *
 * 6.构造器的作用是在创建对象过程中，给成员变量赋值的，不要认为构造器就是用来创建对象的。
 *      创建对象是完全的JVM行为,程序员是控制不了的
 *      构造器执行了,也不意味着这个类的对象创建了(这种情况,下周就能遇到)
 *      但是一旦new创建对象,构造器一定执行(创建对象的方式很多,不止有new对象)
 *
 * 7.构造器的作用就是赋值，那么不要在构造器中乱写代码。
 *      构造器最好就是标准格式(实际开发中,构造器一般都强制要求快捷键生成)，不要将业务代码写进去。
 * 如果成员变量的赋值，确实需要一个复杂的逻辑，建议提取出一个方法，然后在构造器中调用。
 * 要尽量保证构造器的代码简洁性,不要让构造器代码变得很复杂.
 *
 * @since 11:12
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            A a = new A();
        }
    }
}

class A {
    String var1;
    String var2;

    public A(String var1) {
        this.var1 = var1;
    }

    // 能不能再写一个构造器,单独给var2赋值? 不能,形参的名字不同,是不能构造方法重载
    /*public A(String var2) {
        this.var2 = var2;
    }*/

    public A() {
        init();
        System.out.println("构造器执行了!");
    }

    // 初始化方法
    public void init(){
        // 代码逻辑
    }
}